home *** CD-ROM | disk | FTP | other *** search
/ MASPC 1 / MASPC_1.iso / Demos / Demo DIV / DATA / PRG / TUTOR / TUTOR6.PRG < prev    next >
Encoding:
Text File  |  1997-12-03  |  5.3 KB  |  150 lines

  1. //-------------------------------------------------------------------------
  2. // Programa: Tutorial 6
  3. // Autor:    Antonio Marchal
  4. // Fecha:    3/10/97
  5. //-------------------------------------------------------------------------
  6.  
  7. PROGRAM Tutorial_6;
  8.  
  9. GLOBAL
  10.     tablero[99]= 100 dup (1);   // Guarda las 100 casillas del tablero
  11.  
  12. LOCAL
  13.     contador;                   // Contadores de uso general
  14.     contador2;
  15.  
  16. BEGIN
  17.     load_fpg("tutorial\tutor6.fpg");     // Carga el archivo de graficos
  18.     load_fnt("tutorial\tutor6.fnt");     // Carga el archivo de fuentes de letras
  19.     set_mode(m640x480);         // Selecciona el modo de video
  20.     put_screen(0,1);            // Pone la pantalla de fondo
  21.     mouse.graph=999;            // Selecciona el gráfico del cursor del raton
  22.     mouse.file=0;
  23.     tablero[44]=0;              // Pone la ficha del centro cambiada
  24.     dibuja_tablero();           // Proceso que crea el tablero
  25.  
  26.     // Repite hasta que se pulse escape o se complete el juego
  27.     WHILE (NOT key (_esc) AND NOT tablero_completado())
  28.         IF(key(_space))         // Si se pulsa la tecla espacio
  29.             // Vacia el tablero y lo pone como inicialmente
  30.             FROM contador=0 TO 99; tablero[contador]=1; END
  31.             tablero[44]=0;
  32.         END
  33.         FRAME;
  34.     END
  35.     // Si se ha salido del bucle porque el tablero esta completado
  36.     IF (tablero_completado())
  37.         // Elimina todos los procesos que hubiera
  38.         let_me_alone();
  39.         // Pone un mensaje de enhorabuena
  40.         write(1,320,240,4,"ENHORABUENA !!!");
  41.         // Espera has que se pulse espacio
  42.         WHILE (NOT key (_space))
  43.             FRAME;
  44.         END
  45.     END
  46.     // Sale totalmente del juego
  47.     exit("Gracias por jugar !!!",0);
  48. END
  49.  
  50. //-------------------------------------------------------------------------
  51. // Proceso dibuja_tablero
  52. // Crea los procesos de todas las losetas del tablero
  53. //-------------------------------------------------------------------------
  54.  
  55. PROCESS dibuja_tablero()
  56.  
  57. BEGIN
  58.     // Mediante un bucle va creando todas los procesos de las losetas
  59.     FROM contador=0 to 99;
  60.         loseta(140+((contador MOD 10)*40),60+((contador/10)*40),100+tablero[contador],0,contador);
  61.     END
  62. END
  63.  
  64. //-------------------------------------------------------------------------
  65. // Proceso loseta
  66. // Maneja cada una de las losetas
  67. // Entradas: x,y        = coordenadas
  68. //           graph,file = grafico
  69. //           numero     = número de la loseta en la tabla
  70. //-------------------------------------------------------------------------
  71.  
  72. PROCESS loseta(x,y,graph,file,numero)
  73.  
  74. BEGIN
  75.     LOOP
  76.         // Comprueba si la loseta esta colisionando con el ratón
  77.         IF (collision(TYPE mouse))
  78.             // Si colisiona y se pulsa el boton cambia las losetas
  79.             // que se ven implicadas mediante un proceso cambia_loseta
  80.             IF (mouse.left) cambia_loseta(numero MOD 10,numero/10); END
  81.             // Actualiza el gráfico a la nueva posicion
  82.             graph=tablero[numero]+100;
  83.             // Repite hasta que se suelte el raton
  84.             WHILE (mouse.left) FRAME; END
  85.         END
  86.         // Actualiza el gráfico a la nueva posicion
  87.         graph=tablero[numero]+100;
  88.         FRAME;
  89.     END
  90. END
  91.  
  92. //-------------------------------------------------------------------------
  93. // Proceso cambia_loseta
  94. // Realiza el cambio de la loseta indicada y la de alrededor
  95. // Entradas: losetax, losetay = Coordenadas de la loseta en la tabla
  96. //-------------------------------------------------------------------------
  97.  
  98. PROCESS cambia_loseta(losetax,losetay)
  99.  
  100. PRIVATE
  101.     realx;  // Coordenadas reales de cada loseta
  102.     realy;
  103.  
  104. BEGIN
  105.     // Realiza dos bucles, uno horizontal y otro vertical
  106.     FOR (contador=losetax-1;contador<losetax+2;contador++)
  107.         FOR (contador2=losetay-1;contador2<losetay+2;contador2++)
  108.             // Guarda las coordenadas de dicha loseta en las coordenadas reales
  109.             realx=contador; realy=contador2;
  110.  
  111.             // Comprueba si la loseta esta fuera del tablero
  112.             // y hace que dicha loseta sea la del otro extremo
  113.             IF (contador<0) realx=contador+10; END
  114.             IF (contador>9) realx=contador-10; END
  115.             IF (contador2<0) realy=contador2+10; END
  116.             IF (contador2>9) realy=contador2-10; END
  117.  
  118.             // Cambia la loseta de estado
  119.             IF (tablero[realx+(realy*10)]==1)
  120.                 tablero[realx+(realy*10)]=0;
  121.             ELSE
  122.                 tablero[realx+(realy*10)]=1;
  123.             END
  124.         END
  125.     END
  126. END
  127.  
  128. //-------------------------------------------------------------------------
  129. // Proceso tablero_completado
  130. // Comprueba si se ha completado todo el tablero
  131. // Salidas: Devuelve 'Verdadero' si esta completado
  132. //-------------------------------------------------------------------------
  133.  
  134. PROCESS tablero_completado()
  135.  
  136. BEGIN
  137.     // Pone el contador de conseguidos a 0
  138.     contador2=0;
  139.  
  140.     // Va mirando mediante un bucle todas las casillas e incrementa
  141.     // el contador de hechas cada vez que encuentra una
  142.     FROM contador=0 TO 99;
  143.         IF (tablero[contador]==0) contador2++; END
  144.     END
  145.  
  146.     // Si se han contado 100 hechas es que esta el tablero completado
  147.     // sino retorna un valor 'Falso'
  148.     IF (contador2==100) return(true);ELSE return(false); END
  149.  
  150. END